Skip to content

完全版 HTML を GitHub Pages の /dist/ で配信する#34

Merged
watanabe-kohei-jp merged 1 commit into
mainfrom
feat/pages-deploy-dist
May 22, 2026
Merged

完全版 HTML を GitHub Pages の /dist/ で配信する#34
watanabe-kohei-jp merged 1 commit into
mainfrom
feat/pages-deploy-dist

Conversation

@watanabe-kohei-jp
Copy link
Copy Markdown
Collaborator

Summary

  • .github/workflows/pages-deploy.yml を新規追加し、main push で完全版 HTML を Pages に自動デプロイ
  • build.py が完全版 HTML に <link rel=\"canonical\"><meta name=\"robots\" content=\"noindex, follow\"> を自動注入(重複コンテンツ対策)
  • README.md に Pages 経由のダウンロード手順と取り扱い注意を追記

なぜ

PR #12build.py を導入したが、dist/.gitignore 済みで配布は手動だった。「ダウンロードしてダブルクリックで開ける単体 HTML」を、ビルドできない人にも届けるには Pages で URL を渡せる形が必要。

設計判断

  • _site パターン: Pages 設定を「Branch」→「Actions」に切り替えた瞬間、artifact に含めなかった既存 URL が消える。rsync で既存リポ全体を _site/ に詰め、dist/ を追加配信
  • canonical/noindex を build.py 側で注入: ワークフローではなくビルドスクリプトに仕込むことで、ローカルビルドの完全版にも同じメタが入る
  • PR では build-only: deploy は main push のみ。外部 PR に deploy 権限を持たせない
  • dist/ は引き続き git 管理外: PR 完全版(単一ファイル)ビルドスクリプトを追加 #12 の不変条件を維持

必要な手動作業(マージ前後)

Settings → Pages → Source を「GitHub Actions」に切り替える 必要があります(現状は「Deploy from a branch」想定)。切替前は workflow が動いても deploy 段階で失敗します。

Test plan

  • ローカル: python build.py で 4 章すべて [OK]、canonical / robots=noindex が全章の </head> 直前に挿入されることを確認
  • CI (Pages Deploy / build job) が green になること
  • CI (CodeQL / Prompt Injection Guard) が green のまま壊れないこと
  • Pages 設定切替後: main マージ → deploy 成功
  • Pages 設定切替後: co-lect.github.io/lectures/01-claude-code-intro/ の編集用 URL が引き続き 200 を返す
  • Pages 設定切替後: co-lect.github.io/lectures/dist/01-claude-code-intro.html が完全版 HTML を返す
  • 完全版 HTML の view-source で canonical と robots meta が確認できる

Closes #33

🤖 Generated with Claude Code

## 何をしているか

main への push で `python build.py` を CI で実行し、生成された
完全版 HTML (`dist/*.html`) を既存リポと一緒に Pages にデプロイ。

これまで「ローカルでビルドして手動配布」だった完全版が、Pages 上の
URL(`co-lect.github.io/lectures/dist/<章名>.html`)として常に
最新版が公開され、右クリック → 保存でダウンロードできるようになる。

## 変更

- `.github/workflows/pages-deploy.yml` (新規)
  - main push でビルド + デプロイ。PR では build-only で破損検出
  - `_site/` に編集用(リポ全体)+ 完全版(`dist/*.html`)を rsync で詰める
  - 既存の編集用 URL(章フォルダ、`shared/`、`sitemap.xml` 等)は維持
- `build.py`
  - 完全版 HTML の `</head>` 直前に `<link rel="canonical">` と
    `<meta name="robots" content="noindex, follow">` を自動挿入
  - 重複コンテンツ対策。検索エンジンには編集用 URL を正本として扱わせる
- `README.md`
  - 「完全版を入手する」セクションを Pages 経由のダウンロード手順に拡張
  - 取り扱い注意(dist/ を直接編集しない・force-add しない)を明文化

## 設計判断

- **`_site` パターン採用**: Pages 設定を「Actions」に切り替えると、
  artifact に含めなかった既存 URL は消える。rsync で `.git` `.github`
  `dist` `_site` のみ除外して残りを全部 `_site/` に入れることで、
  編集用 URL の互換性を保つ
- **`dist/` は引き続き git 管理外**: CI が生成・配信するため、リポに
  入れる必要なし。PR #12 で確立した不変条件を維持
- **canonical/noindex を build.py 側で注入**: ワークフローではなく
  ビルドスクリプトで仕込むことで、ローカルビルドした完全版にも同じ
  メタが入る(手元配布版でも検索エンジン的に安全)
- **PR ジョブは build-only**: 外部 PR で deploy 権限を持たせない

## デプロイ前に必要な手動作業

Settings → Pages → Source を「GitHub Actions」に切り替える必要あり
(現状は「Deploy from a branch」想定)。切替後は本ワークフローが
唯一のデプロイ経路になる。

## 動作確認(ローカル)

- `python build.py` で 4 章すべて [OK]、size 妥当
- 全章に canonical / robots=noindex が `</head>` 直前に挿入されることを確認

Closes #33

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@watanabe-kohei-jp watanabe-kohei-jp marked this pull request as ready for review May 22, 2026 02:22
@watanabe-kohei-jp watanabe-kohei-jp merged commit 5f3d3cd into main May 22, 2026
7 checks passed
@watanabe-kohei-jp watanabe-kohei-jp deleted the feat/pages-deploy-dist branch May 22, 2026 02:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

完全版 HTML を GitHub Pages の /dist/ で配信する

1 participant